package com.starview.platform.data.type;

import java.io.Serializable;

/**
 * An IType is a type expression -- it denotes a type of some form.
 * 
 * 
 * @author fgm
 * 
 */

public interface IType extends Serializable, TypeTransformable
{
  /**
   * Every type has a name. It is not generally the same as toString().
   * 
   * @return the label associated with the type.
   */
  String typeLabel();

  /**
   * What kind of type is this type?
   * 
   * @return
   */
  Kind kind();

  /**
   * Visitor accept pattern for type expressions
   * 
   * @param visitor
   */
  void accept(ITypeVisitor visitor);
}
